package com.tledu.zyf.dao.impl;

import java.util.List;

import javax.annotation.Resource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;

import com.tledu.zyf.dao.IUserDao;
import com.tledu.zyf.model.User;

/**
 * Repository : 注解可以标记在任何的类上
 * 
 * 用来表明该类是用来执行与数据库相关的操作（即dao对象），并支持自动处理数据库操作产生的异常
 * 
 * @author yingfing
 * @date 2020年10月17日 @time 下午2:34:42
 */
@Repository
public class UserDao extends SqlSessionDaoSupport implements IUserDao {

	/**
	 * Resource这个注解是javaEE的,在javax包下,所以不需要导入其他jar包
	 * 
	 * @ Resource默认使用byName的方式,按照名字匹配,可以写在setter方法上也可以写在变量上
	 * 
	 *   先匹配set方法的名字,匹配不上再匹配方法参数列表的名字
	 * 
	 *   如果还是匹配不上就会转换为byType,根据类型匹配
	 * 
	 *   当然我们也可以指定名字 @Resource(name=”userDao”)
	 * 
	 *   就相当于 Autowired和Qualifier 一起使用
	 * 
	 *   public void setUserDao(@Qualifier(“userDao2”)IUserDao userDao){};
	 */
	@Resource
	@Override
	public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
		super.setSqlSessionFactory(sqlSessionFactory);
	}

	@Override
	public User loadByUsername(String username) {
//		getSqlSession().selectOne("com.tledu.zyf.dao.IUserDao.loadByUserName", username);
		return getSqlSession().getMapper(IUserDao.class).loadByUsername(username);
	}

	@Override
	public List<User> list() {
//		getSqlSession().selectList("com.tledu.zyf.dao.IUserDao.list");
		return getSqlSession().getMapper(IUserDao.class).list();
	}

	@Override
	public void add(User user) {
		getSqlSession().getMapper(IUserDao.class).add(user);
	}

	@Override
	public void delete(int id) {
		getSqlSession().getMapper(IUserDao.class).delete(id);
	}

	@Override
	public void update(User user) {
		getSqlSession().getMapper(IUserDao.class).update(user);
	}

	@Override
	public User loadById(int id) {
		return getSqlSession().getMapper(IUserDao.class).loadById(id);
	}

}
